package cn.b.sky.mes.pp.dao;

import java.util.List;

import cn.b.sky.mes.pp.model.ProductionOrderPlan;
import cn.b.sky.mes.pp.model.condition.ProductionOrderPlanCondition;
import org.apache.ibatis.annotations.Param;

/**
 * 
 * <strong>Title : ProductionOrderPlanDao.java<br></strong>
 * <strong>Package : cn.b.sky.mes.pp.dao<br></strong>
 * <strong>Description : </strong>订单计划持久层接口<br> 
 * <strong>Create on : 2016年1月20日 上午10:37:37<br></strong>
 * <p>
 * @author dapeng.li<br>
 * @version <strong>v1.0.0</strong><br>
 * <br>
 * <strong>修改历史:</strong><br>
 * 修改人 | 修改日期 | 修改描述<br>
 * -------------------------------------------<br>
 * <br>
 * <br>
 */
public interface ProductionOrderPlanDao {

  /**
   * 
   * <strong>Title : selectUncompletedOrdersByOrderNums<br></strong>
   * <strong>Description : </strong>根据订单编号查询新建状态的订单<br> 
   * <strong>Create on : 2016年2月3日 上午9:37:30<br></strong>
   * <p>
   * @param orderNums
   * @param siteCode
   * @param languageCode
   * @return
   * List<ProductionOrderPlan>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public List<ProductionOrderPlan> selectUncompletedOrdersByOrderNums(@Param("orderNums") String[] orderNums,
                                                                      @Param("siteCode") String siteCode, @Param("languageCode") String languageCode);

  /**
   * 
   * <strong>Title : selectProductionOrderPlansByDate<br></strong>
   * <strong>Description : </strong>查询某时间段内的订单计划<br> 
   * <strong>Create on : 2016年1月20日 下午1:01:24<br></strong>
   * <p>
   * @param orderNums
   * @param siteCode
   * @param startDate
   * @param endDate
   * @return
   * List<ProductionOrderPlan>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public List<ProductionOrderPlan> selectProductionOrderPlansByDate(@Param("orderNums") String[] orderNums,
      @Param("siteCode") String siteCode, @Param("languageCode") String languageCode,
      @Param("startDate") String startDate, @Param("endDate") String endDate);

  /**
   * 
   * <strong>Title : selectProductionOrderPlansWithExtInfoByCondition<br></strong>
   * <strong>Description : </strong>根据语言编码及生产订单计划查询对象查询生产订单信息集合(查询的信息结果包含扩展信息字段)<br> 
   * <strong>Create on : 2016-5-23 下午4:52:59<br></strong>
   * <p>
   * @param condition 生产订单计划查询对象
   * @return 生产订单信息集合(查询的信息结果包含扩展信息字段)
   * List<ProductionOrderPlan>
   * @throws 
   * @author JunLin.Yang<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public List<ProductionOrderPlan> selectProductionOrderPlansWithExtInfoByCondition(
      @Param("condition") ProductionOrderPlanCondition condition);

  /**
   * 
   * <strong>Title : getProductionOrderPlansCountByCondition<br></strong>
   * <strong>Description : </strong>根据生产订单计划查询对象查询生产订单信息记录数<br> 
   * <strong>Create on : 2016-5-23 下午4:58:26<br></strong>
   * <p>
   * @param condition 生产订单计划查询对象
   * @return 生产订单信息记录数
   * int
   * @throws 
   * @author JunLin.Yang<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public long getProductionOrderPlansCountByCondition(@Param("condition") ProductionOrderPlanCondition condition);

  /**
   * 
   * <strong>Title : getProductionOrderPlanWithExtInfoByPK<br></strong>
   * <strong>Description : </strong>根据工厂编号及主键ID查询订单计划信息<br> 
   * <strong>Create on : 2016-5-25 上午11:06:12<br></strong>
   * <p>
   * @param siteCode 工厂编号
   * @param id 主键ID
   * @return 订单计划信息
   * ProductionOrderPlan
   * @throws 
   * @author JunLin.Yang<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public ProductionOrderPlan getProductionOrderPlanWithExtInfoByPK(@Param("siteCode") String siteCode,
      @Param("id") String id);

  /**
   * 
   * <strong>Title : insertOrderPlan<br></strong>
   * <strong>Description : </strong>保存订单计划数据到数据库<br> 
   * <strong>Create on : 2016年1月28日 下午4:58:13<br></strong>
   * <p>
   * @param orderPlan
   * void
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public void insertOrderPlan(ProductionOrderPlan orderPlan);

  /**
   * 
   * <strong>Title : deleteOrderPlanByOrderNum<br></strong>
   * <strong>Description : </strong>根据订单编号删除订单计划数据<br> 
   * <strong>Create on : 2016年1月28日 下午5:01:05<br></strong>
   * <p>
   * @param siteCode
   * @param orderNum
   * void
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public void deleteOrderPlanByOrderNum(@Param("siteCode") String siteCode, @Param("orderNum") String orderNum);

  /**
   * 
   * <strong>Title : deleteOrderPlanByOrderNumAndStartDate<br></strong>
   * <strong>Description : </strong>根据订单编号及计划开始日期删除订单计划数据<br> 
   * <strong>Create on : 2016年1月28日 下午5:02:49<br></strong>
   * <p>
   * @param siteCode
   * @param orderNum
   * @param startDate
   * void
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public void deleteOrderPlanByOrderNumAndStartDate(@Param("siteCode") String siteCode,
      @Param("orderNum") String orderNum, @Param("startDate") String startDate);

  /**
   * 
   * <strong>Title : selectScheduleDays<br></strong>
   * <strong>Description : </strong>获取时间范围跨度（天）<br> 
   * <strong>Create on : 2016年2月17日 上午10:38:58<br></strong>
   * <p>
   * @param siteCode
   * @return
   * Integer
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public Integer selectScheduleDays(String siteCode);

  /**
   * 
   * <strong>Title : selectArrangedOrdersByOrderNums<br></strong>
   * <strong>Description : </strong>查询生产订单已经安排的工作中心<br> 
   * <strong>Create on : 2016年5月26日 下午2:01:21<br></strong>
   * <p>
   * @param siteCode
   * @param orderNums
   * @param languageCode
   * @return
   * List<ProductionOrderPlan>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public List<ProductionOrderPlan> selectArrangedOrdersByOrderNums(@Param("siteCode") String siteCode,
      @Param("orderNums") String[] orderNums, @Param("languageCode") String languageCode);
}
